package cn.com.header.zbpk.account.service;

import cn.com.header.core.IPage;
import cn.com.header.core.ISort;
import cn.com.header.zbpk.account.entity.Role;

import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.regex.Pattern;

/**
 * 角色Service接口
 *
 * @author luohaidian
 * @date 2017-11-17
 * @time 09:19
 */
public interface IRoleService {

    Pattern NAME_PATTERN = Pattern.compile("[\\u4E00-\\u9FA5]{2,10}");

    /**
     * 查询全部角色
     * @return
     */
    List<Role> queryBy(Long schoolId);

    /**
     * 定制获取角色列表（返回的属性字段涉及到其他对象）
     * @param role              筛选模板
     * @param fields            查询属性
     * @param sortSet           排序集
     * @param page              分页集
     * @return                  复合筛选条件的角色列表
     */
    List<? extends Role> customLoads(Role role, Set<String> fields, Set<ISort> sortSet, IPage page);

    /**
     * 查询角色列表数
     * @param role
     * @return
     */
    int loadCount(Role role);

    /**
     * 新增/编辑角色
     * @param role
     * @return
     */
    boolean saveOrUpdate(Role role);

    /**
     * 查询用户角色
     * @param userId
     * @return
     */
    List<Role> queryRoleByUserId(Long userId);

    /**
     * 批量插入角色
     * @param roleList
     * @return
     */
    boolean insertBatch(List<Role> roleList);

    /**
     * 删除角色
     * @param roleId
     * @return
     */
    boolean delete(Long roleId);

    /**
     * 根据ID查询角色用户列表
     * @param roleId
     * @return
     */
    Map<String,Object> queryRoleUser(Long roleId);

    /**
     * 查询用户角色
     * @param userId
     * @return
     */
    List<String> queryRoleTypeByUserId(Long userId);

    /**
     * 根据ID查询角色
     * @param id 角色ID
     * @param fields 查询属性
     * @return
     */
    Optional<Role> loadByPK(Long id, Set<String> fields);

    /**
     * 根据角色ID查询角色详情
     * @param roleId 角色ID
     * @return
     */
    Map<String, Object> queryMapByRoleId(Long roleId);

}
